package com.ilxqx.framework.generator.parser;

import com.ilxqx.framework.generator.key.ConstraintKey;

/**
 * 表属性
 * @author venus
 */
public interface TableField extends CamelCase {

    /**
     * 获取字段名
     * @return 字段名
     */
    String getName();

    /**
     * 获取字段类型
     * @return 字段类型
     */
    Class<?> getType();

    /**
     * 设置类型
     * @param type 类型
     */
    void setType(Class<?> type);

    /**
     * 获取字段长度
     * @return 字段长度
     */
    int getSize();

    /**
     * 该字段是否可空
     * @return bool
     */
    boolean isNullable();

    /**
     * 该字段是否非负
     * @return bool
     */
    boolean isUnsigned();

    /**
     * 判断该字段是否是主键
     * @return bool
     */
    boolean isPrimaryKey();

    /**
     * 判断该字段是否是唯一键
     * @return bool
     */
    boolean isUniqueKey();

    /**
     * 判断该字段是否是可重复键（外键和索引）
     * @return bool
     */
    boolean isMultipleKey();

    /**
     * 获取主键
     * @return 主键
     */
    ConstraintKey getPrimaryKey();

    /**
     * 获取唯一键
     * @return 唯一键
     */
    ConstraintKey getUniqueKey();

    /**
     * 获取可重复键
     * @return 可重复键
     */
    ConstraintKey getMultipleKey();

    /**
     * 获取字段备注
     * @return 备注
     */
    String getComment();

    /**
     * 获取备注中的规则
     * @return 规则对象
     */
    Rules getRules();

}
